package com.yansu.own.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yansu.own.common.dtos.ResponseResult;
import com.yansu.own.entity.dto.SysBannerSearchDto;
import com.yansu.own.entity.dto.SysBannerUpdateDto;
import com.yansu.own.entity.pojo.SysBanner;
import com.yansu.own.entity.pojo.SysUser;
import com.yansu.own.entity.vo.SysBannerMapVo;
import com.yansu.own.entity.vo.SysBannerVo;
import com.yansu.own.mapper.SysBannerMapper;
import com.yansu.own.service.SysBannerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class SysBannerServiceImpl extends ServiceImpl<SysBannerMapper, SysBanner> implements SysBannerService {
    @Autowired
    private SysBannerMapper bannerMapper;

    @Override
    public List<SysBannerVo> getBannerTable(SysBannerSearchDto searchDto) {
        return bannerMapper.getBannerTable(searchDto);
    }

    @Override
    @Transactional
    public ResponseResult addBanner(SysBannerUpdateDto insertDto) {
        //todo
        insertDto.setCreateId(12L);
        //添加banner表数据
        int add = bannerMapper.addBanner(insertDto);
        if (add <= 0) {
            return ResponseResult.errorResult();
        }
        //添加banner_user中间表数据
        keepBannerUserData(insertDto);
        //返回成功状态
        return ResponseResult.okResult();
    }

    /**
     * 保存banner_user中间表方法
     */
    private int keepBannerUserData(SysBannerUpdateDto insertDto) {
        //初始化插入条数
        int count = 0;
        //解析所有banner子节点
        List<SysBannerMapVo> banners = insertDto.getBanners();
        for (SysBannerMapVo banner : banners) {
            //todo
            banner.setCreateId(12L);
            banner.setBannerId(insertDto.getId());
            bannerMapper.addBannerMap(banner);
            Long bannerMapId = banner.getId();
            //添加部分用户和banner对应关系到中间表
            if (1 == banner.getMatchUserType()) {
                List<SysUser> users = banner.getUsers();
                for (SysUser user : users) {
                    bannerMapper.addUserBanner(bannerMapId, user.getUserId());
                    count++;
                }
            }
        }
        return count;
    }

//    @Override
//    public ResponseResult updateBanner(BannerManageEntity pojo) {
//        boolean flag = checkPictureUrl(pojo);
//        if (!flag || pojo.getId() == 0) {
//            return AjaxResult.error("参数不能为空");
//        }
//        //校验当前内容是否有做修改，若无则toast提示“不可和当前内容一致”
//        BannerManageEntity entity = bannerManageMapper.getBannerById(pojo.getId());
//        if(checkBannerForUpdate(pojo,entity)){
//            return AjaxResult.error("不可和当前内容一致");
//        }
//
//        //更新原banner表数据
//        int update = bannerManageMapper.updateBanner(pojo);
//        if (update <= 0) {
//            return AjaxResult.error();
//        }
//        //删除中间表所有关于该banner的所有数据
//        int del = bannerManageMapper.deleteUserBanner(pojo.getId());
//        if (del <= 0) {
//            return AjaxResult.error();
//        }
//        //添加新的用户和banner对应关系到中间表
//        int count = keepBannerUserData(pojo);
//        if (count <= 0) {
//            return AjaxResult.error();
//        }
//        return AjaxResult.success();
//    }
//
//    private boolean checkBannerForUpdate(BannerManageEntity pojo, BannerManageEntity entity) {
//        boolean flag = pojo.getContent().equals(entity.getContent());
//        boolean flag1;
//        if (flag) {
//            if (null != pojo.getDescription() && null != entity.getDescription()) {
//                flag1 = pojo.getDescription().equals(entity.getDescription());
//            } else {
//                flag1 = null == pojo.getDescription() && null == entity.getDescription();
//            }
//            return flag1;
//        }
//        return false;
//    }
//
//    @Override
//    public ResponseResult getBanner(int id) {
//        BannerManageEntity entity = bannerManageMapper.getBannerById(id);
//        return AjaxResult.success(entity);
//    }
//
//    @Override
//    public ResponseResult getBannerByUser(Long userId) {
//        List<SysUserBanner> list = bannerManageMapper.getBannerUserByUserId(userId);
//        return AjaxResult.success(list);
//    }
//
//    private boolean checkPictureUrl(BannerManageEntity pojo) {
//        try {
//            if (StringUtils.isNotBlank(pojo.getContent())) {
//                JSONArray jsonArray = JSONArray.parseArray(pojo.getContent());
//                for (int i = 0; i < jsonArray.size(); i++) {
//                    JSONObject job = jsonArray.getJSONObject(i);
//                    if (StringUtils.isEmpty(job.getString("pictureUrl"))) {
//                        return false;
//                    }
//                }
//                return true;
//            }
//        }catch (Exception e){
//            return false;
//        }
//        return true;
//    }
}
